package ar.edu.unq.reporting;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;

import ar.edu.unq.home.PartidoSimpleHome;
import ar.edu.unq.model.Equipo;
import ar.edu.unq.model.PartidoSimple;

/**
 * TODO: description
 */
public class History {

    Equipo team1;

    Equipo team2;

    int team1Wins;

    int team2Wins;

    int draws;

    public int getTeam1Wins() {
        return this.team1Wins;
    }

    public int getTeam2Wins() {
        return this.team2Wins;
    }

    // public int getDerrotasEquipo1() {
    // return victoriasEquipo1;
    // }
    //
    // public int getDerrotasEquipo2() {
    // return victoriasEquipo2;
    // }

    public int getDraws() {
        return this.draws;
    }

    public History(final Equipo team1, final Equipo team2) {
        this.setTeam1(team1);
        this.setTeam2(team2);
    }

    public History execute() {
        PartidoSimpleHome home = new PartidoSimpleHome();
        List<Criterion> criterions = new ArrayList<Criterion>();
        criterions.add(Restrictions.eq("equipoLocal", this.getTeam1()));
        criterions.add(Restrictions.eq("equipoVisitante", this.getTeam2()));

        // Lista de criterias y se la pasamos a nuestro home y este al command y este los apendea
        List<PartidoSimple> partidos = home.findByCriterion(criterions);
        this.countTeam1Wins(partidos);
        this.countTeam2Wins(partidos);
        this.draws = partidos.size() - this.getTeam1Wins() - this.getTeam2Wins();
        return this;
    }

    private void countTeam1Wins(final List<PartidoSimple> partidos) {

        for (PartidoSimple partido : partidos) {
            if (partido.getGolesLocal() > partido.getGolesVisitante()) {
                this.team1Wins++;
            }
        }

    }

    private void countTeam2Wins(final List<PartidoSimple> partidos) {

        for (PartidoSimple partido : partidos) {
            if (partido.getGolesVisitante() > partido.getGolesLocal()) {
                this.team2Wins++;
            }
        }

    }

    public Equipo getTeam1() {
        return this.team1;
    }

    public void setTeam1(final Equipo team1) {
        this.team1 = team1;
    }

    public Equipo getTeam2() {
        return this.team2;
    }

    public void setTeam2(final Equipo team2) {
        this.team2 = team2;
    }

}
